package br.com.conciliador.seguranca.apresentacao;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

import br.com.conciliador.seguranca.negocio.LoginNgc;
import br.com.conciliador.seguranca.vo.UsuarioVo;
import br.com.conciliador.util.jsf.JSFUtil;
import br.com.r2.exception.R2Exception;
import br.com.r2.util.tipodado.Flag;
import br.com.r2.util.tipodado.YesNo;

public class LoginBean
{
	public static String USUARIO_LOGADO = "usuarioLogado";
	
	private String erro;
	
	private UsuarioVo usuarioVo;
	
	private boolean exibirApoena;
	
	public LoginBean()
	{
		this.usuarioVo = new UsuarioVo();
		this.exibirApoena = false;
	}
	
	public String logar()
	{
		try
		{
			JSFUtil jsfUtil = new JSFUtil();
			UsuarioVo vo = null;
			if (this.usuarioVo.getNome() == null)
			{
			   jsfUtil.getSession().setAttribute(USUARIO_LOGADO, this.usuarioVo);
			   vo = LoginNgc.getInstancia().verificarLogin(this.usuarioVo);
			   jsfUtil.getSession().setAttribute(USUARIO_LOGADO, vo);
			   jsfUtil.getSession().setAttribute("tempoSessao", jsfUtil.getSession().getMaxInactiveInterval());
			}
			if (vo != null && vo.getEstEmpresaVo() != null)
			{
			   if (vo.getEstEmpresaVo().getFlagIntegracao() == null || !vo.getEstEmpresaVo().getFlagIntegracao().isPreenchido())
			   {
			      vo.getEstEmpresaVo().setFlagIntegracao(new Flag(YesNo.NO));
			   }
			}
			this.setUsuarioVo(vo);
			if (vo.getFlagAlterarSenha() != null && vo.getFlagAlterarSenha().isPreenchido() && vo.getFlagAlterarSenha().getValor().equals(YesNo.YES))
			{
			   return "alterarSenha";
			}
		}
		catch (R2Exception e)
		{
			FacesMessage message = new FacesMessage(e.getMensagem());
			message.setSeverity(FacesMessage.SEVERITY_ERROR);
			FacesContext.getCurrentInstance().addMessage("", message);
			FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove(USUARIO_LOGADO);
			return null;
		}
		return "logar";
	}
	
	public String logout()
	{
		((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getSession().invalidate();
		return "logout";
	}

	public String getErro()
	{
		return erro;
	}

	public void setErro(String erro)
	{
		this.erro = erro;
	}

	public UsuarioVo getUsuarioVo()
	{
		return usuarioVo;
	}

	public void setUsuarioVo(UsuarioVo usuarioVo)
	{
		this.usuarioVo = usuarioVo;
	}

   public boolean isExibirApoena()
   {
      return exibirApoena;
   }

   public void setExibirApoena(boolean exibirApoena)
   {
      this.exibirApoena = exibirApoena;
   }

}
